package com.xudu.tourbackend.controller;


import com.xudu.tourbackend.common.DeleteBatchRequest;
import com.xudu.tourbackend.common.Result;
import com.xudu.tourbackend.entity.request.LoginRequest;
import com.xudu.tourbackend.entity.request.RegisterRequest;
import com.xudu.tourbackend.entity.request.SearchUserRequest;
import com.xudu.tourbackend.entity.request.UpdateUserRequest;
import com.xudu.tourbackend.entity.vo.UserVo;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author xudu
 * @since 2024-06-17
 */

@RequestMapping("/user")
public interface UserController {


    //====================================================================================================
    //正式代码

    /**
     * 用户注册接口。
     * 通过接收RegisterRequest对象来注册新用户。
     * @param registerRequest 用户注册请求对象
     * @return 新注册用户的id
     */
    @PostMapping("register")
    Result userRegister(RegisterRequest registerRequest) throws Exception;

    /**
     * 通过电话号码注册用户，获取验证码
     * @param registerRequest 用户注册请求对象
     * @return 验证码
     */
    @PostMapping("registerByPhone")
    Result userRegisterByPhone(RegisterRequest registerRequest);

    /**
     * 验证通过短信注册时的验证码。
     * 用于确认用户输入的验证码是否正确
     * @param phone 用户注册或登录使用的电话号码。
     * @param code 用户输入的验证码。
     * @return 注册成功的用户id
     */
    @PostMapping("registerVerifyCode")
    Result registerVerifyCode(String phone, String code);

    /**
     * 用户登录接口，可以通过自定义的账号或者手机号通过密码登陆
     * 通过接收LoginRequest对象和HttpServletRequest来处理用户登录。
     * @param loginRequest 用户登录请求对象
     * @param request HttpServletRequest对象
     * @return 登录成功的用户信息对象。
     */
    @PostMapping("login")
    Result login(LoginRequest loginRequest, HttpServletRequest request) throws Exception;

    /**
     * 通过电话号码登录。
     * @param loginRequest 用户登录请求对象
     * @return 登陆时后端发送的验证码
     */
    @PostMapping("loginByPhone")
    Result loginByPhone(LoginRequest loginRequest);

    /**
     * 登陆验证码校验
     * @param loginRequest 用户登录请求对象
     * @param request HttpServletRequest对象
     * @return 登录成功的用户信息
     */
    @PostMapping("loginVerifyCode")
    Result loginVerifyCode(LoginRequest loginRequest, HttpServletRequest request);

    /**
     * 更新用户信息接口。
     * @param updateUserRequest 用户信息更新请求对象
     * @param request HttpServletRequest对象
     * @return 更新后的用户信息对象。
     */
    @PostMapping("updateUser")
    Result updateUser(UpdateUserRequest updateUserRequest, HttpServletRequest request) throws Exception;

    /**
     * 搜索用户接口。
     * @param searchUserRequest 用户搜索请求对象
     * @param request 请求
     * @return 分页用户信息列表
     */
    @GetMapping("searchUser")
    Result searchUser(SearchUserRequest searchUserRequest, HttpServletRequest request);

    /**
     * 删除用户接口。
     * @param deleteBatchRequest 批量删除请求对象
     * @param request 请求
     * @return 删除成功数量
     */
    @PostMapping("deleteUser")
    Result deleteUser(DeleteBatchRequest deleteBatchRequest, HttpServletRequest request);



}
